CDKを使用してLambda関数のCloudWatch Dashboardを作成してみた。

CDKを使用してLambda関数のCloudWatch Dashboardを作成してみた。

Clock Icon2022.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

概要

 

CloudWatch ダッシュボードは、カスタマイズ可能なホームページです。CloudWatchダッシュボードを使用して異なるリージョンにまたがっているリソースでも、1 つのビューでモニタリングできます。ダッシュボードでリソースのメトリクスおよびアラームを表示することができます。

この記事では、CDKを使用してLambda関数のCloudWatch Dashboardを作成してみました。ここで、次のダッシュボードウィジェットを作成しました。

  • Text Widget : ダッシュボードにテキストを表示するために使用できます。
  • Graph Widget : メトリックのグラフを表示するために使用できます。
  • LogQuery Widget : CloudWatchログの表示に使用できます。

 

やってみた

 

CDKアプリの作成

CDKをインストールする

  • 次のコマンドを使用してCDKをインストールしておきます。
npm install aws-cdk-lib

 

CDKアプリを作成する

  • 新しいディレクトリを作成しておきます。
  • CDKは、プロジェクトディレクトリの名前に基づいてソースファイルとクラスに名前を付けます。
#create new directory
mkdir cloudwatch-dashboard
cd cloudwatch-dashboard

 

  • cdk initコマンドを使用してアプリを初期化しておきます。
cdk init --language typescript

 

Lambda関数の作成

  • プロジェクトのメインディレクトリにresourcesディレクトリを作成しておきます。
mkdir resources

 

  • resourcesディレクトリに次のPythonファイルを作成しておきます。[resources/lambda-handler.py]
 
def handler(event, context): 
   if (event['status']=='success'): 
      return { 
         'statusCode': 200, 
         'body': "SUCCESS" 
      } 
   else: 
      raise Exception("Error") 

 

AWS サービスの作成

  • 新しいファイル [lib/index.ts] を作成して、作成する必要のあるAWSサービスを定義しておきます。
  • ファイルに次のAWSサービスを定義しておきます。
    • Lambda 関数:  PythonランタイムでLambda関数を定義しておきます。
    • CloudWatch Dashboard : 次のウィジェットでダッシュボードを定義しておきます。
      • Text Widget : ダッシュボードのタイトルを表示します。
      • Graph Widget : メトリックのグラフを表示します。 次のメトリックのグラフを作成しました。
        • Invocations
        • Errors
      • LogQuery Widget : 最後の10のログエントリを表示します。

 

import { Construct } from 'constructs';
import { Runtime, Function, AssetCode } from 'aws-cdk-lib/aws-lambda';
import { StackProps} from 'aws-cdk-lib';
import { Dashboard, TextWidget, GraphWidget,LogQueryWidget } from 'aws-cdk-lib/aws-cloudwatch';

export class cloudwatchDashboardStack extends Construct {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id);

   //Create Lambda Function
    const lambdaFunction = new Function(this, "cloudwatchDashboardStack", {
        code: new AssetCode("resources"),
        handler: "lambda-handler.handler",
        runtime: Runtime.PYTHON_3_9,
        functionName: "cloudwatch-Dashboard"
      });

   //Create CloudWatch Dashboard
    const dashboard = new Dashboard(this, 'dashboard',  {
        dashboardName: 'LambdaDashboard',
      }); 
      
   //Create Title with Text Widget
    dashboard.addWidgets(new TextWidget({
        markdown: '# Lambda CloudWatch Dashboard',
        height: 2,
        width: 20
      }));

    //Create Metrics Graph with Graph Widget
      dashboard.addWidgets(new GraphWidget({
        title: "Invocations",
        left: [lambdaFunction.metricInvocations()],
        width: 20
      }))
  
      dashboard.addWidgets(new GraphWidget({
        title: "Errors",
        right: [lambdaFunction.metricErrors()],
        width: 20
      }))

     //Create Widget to show Log Entries
      dashboard.addWidgets(new LogQueryWidget({
        logGroupNames: [lambdaFunction.logGroup.logGroupName],
        queryLines:[
          "fields @timestamp, @message",
          "limit 10"],
        width: 20,
        }))
  }
}

 

アプリにサービスを追加する

  • /lib/cloudwatch-dashboard-stack.ts ファイルに次のコードを追加しておきます。
#Import the Index file created in the previous step
import * as cw from '../lib/index';
new cw.cloudwatchDashboardStack(this, 'cloudwatch-Dashboard');

 

CDK Deploy

  • Deploy する前に、環境をブートストラップする必要があります。
  • 次のコマンドを実行して、AWS環境をブートストラップしておきます。
cdk bootstrap

 

  • CDKを展開しておきます。
cdk deploy

 

テストする

  • コンソールでは、サービスが作成されたことを見ることができます。

Lambda Function

 

CloudWatch Dashboard

 

  • ラムダ関数をテストして、メトリックとログを生成しておきます。
  • ダッシュボードに表示されるグラフとログを見ることができます。

 

 

 

まとめ

CDKを使用してLambda関数のCloudWatch Dashboardを作成してみました。いろいろな種類のウィジェットで、他のリソースのダッシュボードを作成することができます。

Reference :

CloudWatch Dashboard

CloudWatch Dashboard using CDK

Text Widget using CDK

Graph Widget using CDK

Log Query Widget using CDK

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.